package com.kt.delivery.utils;

import com.kt.delivery.domain.vo.KDVo;
import com.kt.delivery.domain.vo.Station;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @ClassName MachingUtils
 * @Description TODO
 * @Author ghs
 * @Date 2024-04-04 12:15
 * @Version 1.0
 */
@Component
public class MachingUtils {

    public List<Station> extractStationInfo(String text) {

        List<Station> stations = new ArrayList<>();




        // 匹配驿站信息
        String regexStation = "\\b([^\\s]*站[^\\s]*)\\b";
        Pattern patternStation = Pattern.compile(regexStation);
        Matcher matcherStation = patternStation.matcher(text);

        // 匹配手机尾号
        String regexPhone = "手机尾号(\\d+)";
        Pattern patternPhone = Pattern.compile(regexPhone);
        Matcher matcherPhone = patternPhone.matcher(text);

        // 匹配快递公司
        String regexKd = "\\b(?:申通快递|韵达快递|中通快递|韵达|中通|申通)\\b";
        Pattern patternKd = Pattern.compile(regexKd,Pattern.CASE_INSENSITIVE);
        Matcher matcherKd = patternKd.matcher(text);

        // 匹配取件码
        String regexCode = "\\b([a-zA-Z\\d]+-[\\da-zA-Z-]+)\\b";
        Pattern patternCode = Pattern.compile(regexCode);
        Matcher matcherCode = patternCode.matcher(text);

        // 快递单号
        String regexKdCode = "(?:中通快递|申通快递|韵达快递)\\d+";
        Pattern patternKdCode = Pattern.compile(regexKdCode);
        Matcher matcherKdCode = patternKdCode.matcher(text);


//        if (matcherKdCode.find()){
//            System.out.println(matcherCode.group());
//        }





        // 重新设置内部循环的匹配器


        while (matcherStation.find()) {
            Station station = new Station();

            station.setStation(matcherStation.group());
            List<KDVo> kdVoList = new ArrayList<>();
            Matcher matcherPhone1 = patternPhone.matcher(text);
            Matcher matcherCode1 = patternCode.matcher(text);
            Matcher matcherKd1 = patternKd.matcher(text);
            Matcher matcherKdCode1 = patternKdCode.matcher(text);

            //重置匹配器的位置以便下次查找




            while (matcherPhone1.find() && matcherCode1.find() && matcherKd1.find() && matcherKdCode1.find()){
                KDVo  kdVo = new KDVo();
                kdVo.setPhone(matcherPhone1.group());
                kdVo.setCode(matcherCode1.group());
                kdVo.setKd(matcherKd1.group());
                kdVo.setDhCode(matcherKdCode1.group());
                kdVoList.add(kdVo);
            }


            station.setKds(kdVoList);
            stations.add(station);
        }





//
//
//        matcherCode.reset();
//        while (matcherCode.find()) {
//            kdVo = new KDVo();
//            kdVo.setCode(matcherCode.group());
//            kdVoList.add(kdVo);
//        }
//
//        matcherKd.reset();
//        while (matcherKd.find()){
//            kdVo = new KDVo();
//            kdVo.setKd(matcherKd.group());
//            kdVoList.add(kdVo);
//        }
//
//        matcherKdCode.reset();
//        while (matcherKdCode.find()){
//            kdVo = new KDVo();
//            kdVo.setDhCode(matcherKdCode.group());
//            kdVoList.add(kdVo);
//        }
//
//        matcherPhone.reset();
//        while (matcherPhone.find()){
//            kdVo = new KDVo();
//            kdVo.setPhone(matcherPhone.group());
//            kdVoList.add(kdVo);
//        }
//



//        Station station = new Station();
//        while (matcherStation.find()) {
//
//            station.setStation(matcherStation.group());
//
//            KDVo kdVo = new KDVo();
//
//            // 手机尾号
//            while (matcherPhone.find()) {
//                kdVo.setPhone(matcherPhone.group()); // 获取括号内的内容
//                kdVoList.add(kdVo);
//            }
//
//            // 快递公司信息
//            while (matcherKd.find()) {
//                kdVo.setKd(matcherKd.group());
//                kdVoList.add(kdVo);
//            }
//
//            // 取件码
//            while (matcherCode.find()) {
//                kdVo.setCode(matcherCode.group()); // 获取括号内的内容
//                kdVoList.add(kdVo);
//            }
//
//            // 快递单号
//            while (matcherKdCode.find()){
//                kdVo.setDhCode(matcherKdCode.group());
//                kdVoList.add(kdVo);
//            }
//
//            station.setKds(kdVoList);
//
//            stations.add(station);
//
//            // 重置匹配器的位置以便下次查找
//            matcherPhone.reset();
//            matcherKd.reset();
//            matcherCode.reset();
//            matcherKdCode.reset();
//        }



        return stations;

}

//    // 匹配手机尾号，通常手机尾号是4位或更多位的数字
//    public List<String> extractPhoneTail(String text) {
//        List<String> phone = new ArrayList<>();
//
//
//        return phone;
//    }

    // 匹配快递公司信息，例如“申通快递”或“韵达快递”
//    public List<String> extractExpressCompany(String text) {
//
//        List<String> company = new ArrayList<>();
//
//        String regex = "\\b(申通快递|韵达快递)\\b";
//        Pattern pattern = Pattern.compile(regex);
//        Matcher matcher = pattern.matcher(text);
//        if (matcher.find()) {
//            company.add(matcher.group());
//        }
//        return company;
//    }

    // 匹配取件码，假设取件码是一串数字，且前后可能有特定字符或格式
    public List<String> extractPickupCode(String text) {

        List<String> code = new ArrayList<>();

        // 这里的正则表达式需要根据实际的取件码格式来编写
        // 假设取件码是6位数字，且前面有“取件码：”这样的提示
        String regex = "取件码：(\\d{6})";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);
        if (matcher.find()) {
            code.add(matcher.group());
        }
        return code;
    }

    // 你可以根据OCR识别出的文本的具体格式添加更多的匹配方法
}

